package com.wicket.okrcomponent.integration.dto;

import com.wicket.okrcomponent.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.validation.constraints.NotNull;
import lombok.Data;

/**
 * @desc MemberChannelDto
 * @使用场景
 */
@Data
public class MemberChannelDto extends BaseDto implements Serializable {

  /**
   * 成员通道关系ID
   */
  @ApiModelProperty("成员通道关系ID")
  private String memberChannelRelationId;

  /**
   * 接收人身份人员ID
   */
  @ApiModelProperty("接收人身份人员ID")
  private String originalRoleMemberId;

  /**
   * 接受人账号
   */
  @ApiModelProperty("接受人账号")
  private String userId;

  /**
   * 创建于空间ID
   */
  @ApiModelProperty("创建于空间ID")
  private String spaceId;

  /**
   * 创建于联盟应用ID
   */
  @ApiModelProperty("创建于联盟应用ID")
  private String appId;

  /**
   * 通道ID
   */
  @ApiModelProperty("通道ID")
  private String channelId;

  /**
   * 通道类型编码 MESSAGE_ASSISTANT:消息助手 PERSONAL_SESSION:个人会话 GROUP_SESSION:群会话
   */
  @ApiModelProperty("通道类型编码")
  private String channelTypeCode;

  /**
   * 最新一条消息内容
   */
  @ApiModelProperty("最新一条消息内容")
  private String newMessage;

  /**
   * 冗余关联内容表编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表
   */
  @ApiModelProperty("冗余关联内容表编码")
  private String tableTypeCode;

  /**
   * 冗余关联内容表主键ID
   */
  @ApiModelProperty("冗余关联内容表主键ID")
  private String entityId;

  /**
   * 是否静音 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否静音")
  private String isSilence;

  /**
   * 是否置顶 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否置顶")
  private String isTop;

  /**
   * 是否有人at我 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否有人at我")
  private String isAtMe;

  /**
   * 消息提示类型 RED_POINT_TYPE:红点型 NUMBER_TYPE:数量型 MIX_TYPE:混合型
   */
  @ApiModelProperty("消息提示类型")
  private String messagePromptType;

  /**
   * 消息数
   */
  @ApiModelProperty("消息数")
  private Long messageNum;

  /**
   * 操作时间
   */
  @ApiModelProperty("操作时间")
  private Date operateTime;

  /**
   * 通道缩略图地址
   */
  @ApiModelProperty("通道缩略图地址")
  private String channelLogo;

  /**
   * 通道名称
   */
  @ApiModelProperty("通道名称")
  private String channelName;

  /**
   * 冗余虚拟形象ID
   */
  @ApiModelProperty("冗余虚拟形象ID")
  private String virtualImageId;

  /**
   * 对方是员工或个人ID
   */
  @ApiModelProperty("对方是员工或个人ID")
  private String counterpartEntityId;

  /**
   * 对方缩略图地址
   */
  @ApiModelProperty("对方缩略图地址")
  private String counterpartChannelLogo;

  /**
   * 对方名称
   */
  @ApiModelProperty("对方名称")
  private String counterpartChannelName;

  /**
   * 虚拟形象图片
   */
  @ApiModelProperty("虚拟形象图片")
  private String virtualImage;

  /**
   * 虚拟形象名称
   */
  @ApiModelProperty("虚拟形象名称")
  private String virtualImageName;

  /**
   * 对方虚拟形象标识
   */
  @ApiModelProperty("对方虚拟形象标识")
  private String virtualImageCode;

  /**
   * 未读条数
   */
  @ApiModelProperty("未读条数")
  private Long unReadCounts;

  /**
   * 消息使用通道类别 INTELLIGENT_STUDY:智能学习 INTELLIGENT_CUSTOMER_SERVICE:智能客服 NOTIFICATION_ANNOUNCEMENT:通知公告 CONTENT_COMMUNICATION:内容沟通 WORK_CIRCLE:工作圈 ADDRESS_BOOK:通讯录
   */
  @ApiModelProperty("消息使用通道类别")
  private String msgChannelClassCode;

  /**
   * 是否退出保留 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否退出保留")
  private String isSaveData;

  /**
   * 绑定手机
   */
  @ApiModelProperty("绑定手机")
  private String phone;

  /**
   * 真实姓名
   */
  @ApiModelProperty("真实姓名")
  private String idCardName;

  /**
   * 身份人员编号
   */
  @ApiModelProperty("身份人员编号")
  private String roleMemberCode;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    MemberChannelDto that = (MemberChannelDto) o;
    return (
      memberChannelRelationId == that.memberChannelRelationId &&
      originalRoleMemberId == that.originalRoleMemberId &&
      userId == that.userId &&
      spaceId == that.spaceId &&
      appId == that.appId &&
      channelId == that.channelId &&
      channelTypeCode == that.channelTypeCode &&
      newMessage == that.newMessage &&
      tableTypeCode == that.tableTypeCode &&
      entityId == that.entityId &&
      isSilence == that.isSilence &&
      isTop == that.isTop &&
      isAtMe == that.isAtMe &&
      messagePromptType == that.messagePromptType &&
      messageNum == that.messageNum &&
      operateTime == that.operateTime &&
      channelLogo == that.channelLogo &&
      channelName == that.channelName &&
      virtualImageId == that.virtualImageId &&
      counterpartEntityId == that.counterpartEntityId &&
      counterpartChannelLogo == that.counterpartChannelLogo &&
      counterpartChannelName == that.counterpartChannelName &&
      virtualImage == that.virtualImage &&
      virtualImageName == that.virtualImageName &&
      virtualImageCode == that.virtualImageCode &&
      unReadCounts == that.unReadCounts &&
      msgChannelClassCode == that.msgChannelClassCode &&
      isSaveData == that.isSaveData &&
      phone == that.phone &&
      idCardName == that.idCardName &&
      roleMemberCode == that.roleMemberCode
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      memberChannelRelationId,
      originalRoleMemberId,
      userId,
      spaceId,
      appId,
      channelId,
      channelTypeCode,
      newMessage,
      tableTypeCode,
      entityId,
      isSilence,
      isTop,
      isAtMe,
      messagePromptType,
      messageNum,
      operateTime,
      channelLogo,
      channelName,
      virtualImageId,
      counterpartEntityId,
      counterpartChannelLogo,
      counterpartChannelName,
      virtualImage,
      virtualImageName,
      virtualImageCode,
      unReadCounts,
      msgChannelClassCode,
      isSaveData,
      phone,
      idCardName,
      roleMemberCode
    );
  }

}
